﻿import mx.events.ItemClickEvent;
import mx.controls.Alert;
import mx.events.ListEvent;

[Bindable]
private var proyectos : XML;

[Bindable]
private var usuarios : XML;

[Bindable]
private var estatuslst : XML;

[Bindable]
private var tituloFormaProyectos : String = "";

[Bindable]
private var tituloFormaUsuarios : String = "";

[Bindable]
private var tituloFormaEstatus : String = "";

[Bindable]
private var usuario : XML;

[Bindable]
private var proyecto : XML;

[Bindable]
private var estatus : XML;

[Bindable]
public var parentRefresh : Function;

private function inicializar() : void {
	currentState = "proyectos";
}

public function refresh() : void {
	listaProyectosHttp.send();
	listaUsuariosHttp.send();
	listaEstatusHttp.send();
}

private function listaProyectosResult() : void {
	if (listaProyectosHttp.lastResult.error != undefined) {
		Alert.show(listaProyectosHttp.lastResult.error, "Error");
	} else {
		proyectos = listaProyectosHttp.lastResult.proyectos[0];
		trace(proyectos);
	}
}

private function listaUsuariosResult() : void {
	if (listaUsuariosHttp.lastResult.error != undefined) {
		Alert.show(listaUsuariosHttp.lastResult.error, "Error");
	} else {
		usuarios = listaUsuariosHttp.lastResult.usuarios[0];
		trace(usuarios);
	}
}

private function listaEstatusResult() : void {
	if (listaEstatusHttp.lastResult.error != undefined) {
		Alert.show(listaEstatusHttp.lastResult.error, "Error");
	} else {
		estatuslst = listaEstatusHttp.lastResult.estatus[0];
	}
}

private function httpError(evento : Object) : void {
	trace(evento);
	Alert.show("Error al contactar el servidor", "Error");
}

private function clickTab(evento : ItemClickEvent) : void {
	currentState = evento.item.data;
}

private function modificarProyecto(evento : ListEvent) : void {
	formaProyectos.visible = true;
	
	proyecto = proyectosGrid.selectedItem as XML;
	
	tituloFormaProyectos = "Modificar proyecto";
	nombreProyecto.text = proyecto.@nombre;
	textoProyecto.text = proyecto.@descripcion;
	
	var i : int;
	for (i = 0; i < usuarios.usuario.length(); i++) {
		if (usuarios.usuario[i].@id == proyecto.usuario[0].@id) {
			usuarioAdmin.selectedItem = usuarios.usuario[i];
			break;
		}
	}
}

private function nuevoProyecto() : void {
	formaProyectos.visible = true;
	tituloFormaProyectos = "Nuevo proyecto";
	nombreProyecto.text = "";
	textoProyecto.text = "";
	proyecto = null;
}

private function guardarProyecto() : void {
	var usCombo : XML = usuarioAdmin.selectedItem as XML;
	if (proyecto == null) {
		agregarProyectosHttp.request.nombre = nombreProyecto.text;
		agregarProyectosHttp.request.descripcion = textoProyecto.text;
		agregarProyectosHttp.request.ownerId = usCombo.@id;
		agregarProyectosHttp.send();
	} else {
		modificarProyectosHttp.request.id = proyecto.@id;
		modificarProyectosHttp.request.nombre = nombreProyecto.text;
		modificarProyectosHttp.request.descripcion = textoProyecto.text;
		modificarProyectosHttp.request.ownerId = usCombo.@id;
		modificarProyectosHttp.send();
	}
}

private function proyectoAgregadoResult() : void {
	if (agregarProyectosHttp.lastResult.error != undefined) {
		Alert.show(agregarProyectosHttp.lastResult.error, "Error");
	} else {
		formaProyectos.visible = false;
		refresh();
		parentRefresh();
	}
}

private function proyectoModificadoResult() : void {
	if (modificarProyectosHttp.lastResult.error != undefined) {
		Alert.show(modificarProyectosHttp.lastResult.error, "Error");
	} else {
		formaProyectos.visible = false;
		refresh();
		parentRefresh();
	}
}

private function nuevoUsuario() : void {
	formaUsuarios.visible = true;
	usuario = null;
	tituloFormaUsuarios = "Nuevo usuario";
	nicknameUsuario.text = "";
	passwordUsuario.text = "";
	nombreUsuario.text = "";
	emailUsuario.text = "";
	administradorUsuario.selected = false;
	activoUsuario.selected = false;
}

private function modificarUsuario(evento : ListEvent) : void {
	formaUsuarios.visible = true;
	
	usuario = usuariosGrid.selectedItem as XML;
	
	tituloFormaUsuarios = "Modificar usuario";
	nicknameUsuario.text = usuario.@usuario;
	passwordUsuario.text = usuario.@password;
	nombreUsuario.text = usuario.@nombre;
	emailUsuario.text = usuario.@email;
	administradorUsuario.selected = new Boolean(new Number(usuario.@admin));
	activoUsuario.selected = new Boolean(new Number(usuario.@activo));
}

private function guardarUsuario() : void {
	if (usuario == null) {
		nuevoUsuarioAction();
	} else {
		modificarUsuarioAction();
	}
}

private function nuevoUsuarioAction() : void {
	agregarUsuariosHttp.request.usuario = nicknameUsuario.text;
	agregarUsuariosHttp.request.password = passwordUsuario.text;
	agregarUsuariosHttp.request.nombre = nombreUsuario.text;
	agregarUsuariosHttp.request.email = emailUsuario.text;
	agregarUsuariosHttp.request.admin = administradorUsuario.selected;
	agregarUsuariosHttp.request.activo = activoUsuario.selected;
	agregarUsuariosHttp.send();
}

private function usuarioAgregadoResult() : void {
	if (agregarUsuariosHttp.lastResult.error != undefined) {
		Alert.show(agregarUsuariosHttp.lastResult.error, "Error");
	} else {
		formaUsuarios.visible = false;
		refresh();
	}
}

private function modificarUsuarioAction() : void {
	modificarUsuariosHttp.request.id = usuario.@id;
	modificarUsuariosHttp.request.usuario = nicknameUsuario.text;
	if (passwordUsuario.text == "") {
		modificarUsuariosHttp.request.password = undefined;
	} else {
		modificarUsuariosHttp.request.password = passwordUsuario.text;
	}
	modificarUsuariosHttp.request.nombre = nombreUsuario.text;
	modificarUsuariosHttp.request.email = emailUsuario.text;
	modificarUsuariosHttp.request.admin = administradorUsuario.selected;
	modificarUsuariosHttp.request.activo = activoUsuario.selected;
	modificarUsuariosHttp.send();
}

private function usuarioModificadoResult() : void {
	if (modificarUsuariosHttp.lastResult.error != undefined) {
		Alert.show(modificarUsuariosHttp.lastResult.error, "Error");
	} else {
		formaUsuarios.visible = false;
		refresh();
	}
}

private function nuevoEstatus() : void {
	formaEstatus.visible = true;
	
	tituloFormaEstatus = "Nuevo estatus";
	nombreEstatus.text = "";
	adminEstatus.selected = false;
	
	estatus = null;
}

private function modificarEstatus() : void {
	formaEstatus.visible = true;
	
	estatus = estatusGrid.selectedItem as XML;
	
	tituloFormaEstatus = "Modificar estatus";
	nombreEstatus.text = estatus.@nombre;
	adminEstatus.selected = new Boolean(new Number(estatus.@admin));
}

private function guardarEstatus() : void {
	if (estatus == null) {
		agregarEstatusHttp.request.nombre = nombreEstatus.text;
		agregarEstatusHttp.request.admin = adminEstatus.selected;
		agregarEstatusHttp.send();
	} else {
		modificarEstatusHttp.request.id = estatus.@id;
		modificarEstatusHttp.request.nombre = nombreEstatus.text;
		modificarEstatusHttp.request.admin = adminEstatus.selected;
		modificarEstatusHttp.send();
	}
}

private function estatusAgregadoResult() : void {
	if (agregarEstatusHttp.lastResult.error != undefined) {
		Alert.show(agregarEstatusHttp.lastResult.error, "Error");
	} else {
		formaEstatus.visible = false;
		refresh();
	}
}

private function estatusModificadoResult() : void {
	if (modificarEstatusHttp.lastResult.error != undefined) {
		Alert.show(modificarEstatusHttp.lastResult.error, "Error");
	} else {
		formaEstatus.visible = false;
		refresh();
	}
}